import axios from '../lib/axios.js';
import qs from '../lib/qs.js';
import spark_md5 from '../lib/spark-md5.js';

// ajax请求封装
//1:请求的url地址
//2:请求的方式
//3:请求的参数
//4:请求的结果

//服务器基础地址

const serverUrl = 'https://service.huhuiyu.top';

let ajax = {
  //token信息的本地存储
  tokenKey: 'service.huhuiyu.top.token_info',
  saveToKen: (data) => {
    if (data && data.token) {
      localStorage.setItem(ajax.tokenKey, data.token);
    }
  },
  loadToken: () => {
    let token = localStorage.getItem(ajax.tokenKey);
    return token ? token : '';
  },
  //发送ajax=请求的方法
  //参数1:地址 参数2:给服务器的参数 参数3:请求方式 参数4:结果处理函数
  send: (url, param, method, callback) => {
    //处理参数，转换json为查询字符串
    let sparam = qs.stringify(param, { allowDots: true });
    //处理完整的地址
    url = serverUrl + url;
    //get请求只能是地址传递数据
    if ('get' == method.toLowerCase()) {
      //拼接到地址栏
      url = url + '?' + sparam;
      //不再需要data传递参数
      sparam = '';
    }
    //发起请求
    let promise = axios({
      url: url,
      method: method,
      data: sparam,
      headers: {
        token: ajax.loadToken(),
      },
    });
    promise
      .then((resp) => {
        //保存token信息
        ajax.saveToKen(resp.data);
        //通过回调处理结果
        callback(resp.data);
      })
      .catch((err) => {
        //错误的处理
        console.error('请求发生错误：', err);
        //伪造一个结果给问题回调处理
        callback({ code: 500, message: '网站忙，请稍后重试', success: false });
        //服务器应答规范中一定会有code，message，success这三个字段
        //code是应答状态码
        //message是应答信息
        //success是业务是否正确处理
      });
  },
  get: (url, param, callback) => {
    ajax.send(url, param, 'GET', callback);
  },
  post: (url, param, callback) => {
    ajax.send(url, param, 'POST', callback);
  },
};
const tools = {
  //md5加密
  md5: (info) => {
    if (info && info.trim() != '') {
      return spark_md5.hash(info);
    }
    return '';
  },
  //格式化日期或者时间
  formatDate: (date, format = 'yyyy-MM-dd hh:mm:ss') => {
    console.log('传入的参数', date, format);
    let now = new Date();
    if (typeof date == 'number') {
      now.setTime(date);
    } else {
      now = date;
    }

    // 获取年月日时分秒的信息
    let yyyy = now.getFullYear();
    let MM = now.getMonth() + 1;
    let dd = now.getDate();
    let hh = now.getHours();
    let mm = now.getMinutes();
    let ss = now.getSeconds();
    //前置补零
    MM = MM < 10 ? '0' + MM : MM;
    dd = dd < 10 ? '0' + dd : dd;
    hh = hh < 10 ? '0' + hh : hh;
    mm = mm < 10 ? '0' + mm : mm;
    ss = ss < 10 ? '0' + ss : ss;

    //替换格式字符串成为真正的时间值
    let result = format.replace(/yyyy/g, yyyy);
    result = result.replace(/MM/g, MM);
    result = result.replace(/dd/g, dd);
    result = result.replace(/hh/g, hh);
    result = result.replace(/mm/g, mm);
    result = result.replace(/ss/g, ss);

    return result;
  },
  //合并json
  mergeJson: (...jsons) => {
    let result = {};

    for (let i = 0; i < jsons.length; i++) {
      let json = jsons[i];
      for (let key in json) {
        //复制json的信息
        result[key] = json[key];
      }
    }
    return result;
  },
};
export { ajax as ajax, tools as tools };
